/******************************************************
Cours:   LOG121
Session: A2013
Groupe:  
Projet: Laboratoire #3
etudiant(e)s: Simon Castro
			  Fredy Alexander 
			  Renaud Vincent
              
              
Professeur : 
Nom du fichier: De.java
Date cree: 2013-10-20
Date dern. modif. 2013-10-23
*******************************************************
Historique des modifications
*******************************************************
2013-10-20 Version 1.0
2013-10-23 Version 1.1 Ajout des attributs
*******************************************************/ 

package cadricielJeuDe;
import java.util.ArrayList;

/**
 * Classe decrivant un de. Celui-ci comporte un certain nombre de faces
 * et une valeur pour chaque face. Comme ces valeurs peuvent etre un nombre, 
 * un symbole, une lettre ou autre, elles sont classees dans une liste d'objets.
 * @author Renaud
 * @date 2013-10-23
 */
public class De implements Comparable<De> {

    //Nombre de faces du de
	private int nbrFaces;
	//Liste des valeurs de chaques faces
	private ArrayList<Integer> listeValeurs;
	
	/*
	 * Constructeur
	 */
	public De(int nbrFaces, ArrayList<Integer> listeValeurs) {
		this.nbrFaces = nbrFaces;
		this.listeValeurs = listeValeurs;
	}
	
	/*
	 * Accesseurs
	 */
	public int getNbrFaces() {
		return nbrFaces;
	}
	
	/**
	 * Methode qui permet d'obtenir la valeur d'une face de selon un index.
	 * 
	 * @param faceNumero
	 * @return la valeur de la face.
	 */
	public int getValeurAt(int faceNumero) {
		return this.listeValeurs.get(faceNumero);
	}
	
	/*
	 * Mutateurs
	 */
	//A implementer lors de l'utilisation du framework (selon type de de)
	
	/**
	 * Methode permettant de modifier manuellement le valeur d'une face d'un
	 * de
	 * 
	 * @param faceNumero
	 * @param valeurFace
	 */
	public void setValeurAt(int faceNumero, int valeurFace) {
		this.listeValeurs.set(faceNumero, valeurFace);
	}
	
	/**
	 * Methode retournant la valeur d'une face du de tiree au hasard.
	 * Le calcul tient compte du nombre de faces du de et donc de la longeur
	 * de sa liste.
	 * @return Un entier genere au hasard
	 */
	public int brasser() {
		return this.listeValeurs.get((int) (this.nbrFaces * Math.random()));
	}
	/**
	 * Methode utile pour les des a face numerique. Elle sert a comparer 
	 * la valeur entre deux faces de des.
	 * @param Un objet De a comparer avec le de actuel
	 * @return -1 si la face actuelle est plus petite, 1 si elle est plus 
	 * grande, 0 si elle est egale
	 */
	public int compareTo(De autreDe) {
		if(this.brasser() < autreDe.brasser()) 
			return -1;
		else if(this.brasser() > autreDe.brasser()) 
			return 1;
		else
			return 0;
	}	
	
	/*
	 * To-String
	 */
	public String toString() {
		return "Nombre de faces: " + this.nbrFaces + "\nFaces du de: " 
				+ this.listeValeurs.toString();
	}
}